import sys
import load
from collections import Counter

#加载字典文件
dictionary_list = load.load_file('2of12inf.txt')

#因为有一些字典文件会自动忽略掉'a'和'i'
dictionary_list.append('a')
dictionary_list.append('i')

dictionary_sorted = sorted(dictionary_list)

#用户输入的初始化名字
ini_name = input('请输入名字:\n')

def find_anagrams(name,word_list):

    name_counter = Counter(name) #将以变量键值对形式字典化

    anagrams = [] #创建一个空列表储存易位短语

    for word in word_list: #遍历字典文件中的每个单词
        test = '' #累计变量变量name和word中的字母
        word_counter = Counter(word)
        for letter in word: #遍历word变量值中的每个单词
            if name_counter[letter] <= word_counter[letter]: #比较值出现的次数
                test += letter #重新组合成字符串赋值给test
        if Counter(test) == word_counter: #这是在name == word的情况下
            anagrams.append(word)

    print(*anagrams,sep='\n')
    print('输入的名字共计{}个字母\n'.format(len(name)))
    print('共有{}个易位词可供选择\n'.format(len(anagrams)))


def main():
    name = ''.join(ini_name.lower().split())

    name = name.replace('_','') #删除连字符

    limit = len(name)

    phrase = ''

    running = True

    while running:
        temp_phrase = phrase.replace(' ','') #删除空格
        if len(temp_phrase) < limit:
            print('易位短语长度为:{}\n'.format(len(temp_phrase)))

            find_anagrams(name,dictionary_list)
            print('当前易位短语：\n',end=' ')

            name,choice = process_choice(name)
            phrase += choice + ' '

        elif len(temp_phrase) ==limit:
            print('#########完成#########\n')
            print('易位名:',end=' ')
            print(phrase,file=sys.stderr)
            try_again = input('是否重新运行程序，继续请安任意键，退出按n\n')
            if try_again == 'n':
                running = False
                sys.exit()
            else:
                main()

def process_choice(name):
    while True:
        choice = input('一个易位词或者输入#结束程序，输入空格重新开始') #判断用户选择
        if choice == ' ':
            main()
        elif choice == '#':
            sys.exit(1)
        else:
            candidate = ''.join(choice.lower().split())
        left_over_list = list(name) #转换成序列
        for letter in candidate: #遍历每个字母
            if letter in left_over_list:
                left_over_list.remove(letter) #如果输入的字母在剩余的字母中则删除
            if len(name) - len(left_over_list) == len(candidate):
                break
            else:
                print('错误！请使用其他的选择!',file=sys.stderr)
            name = ''.join(left_over_list)
            return name,choice

if __name__ == '__main__':
    main()